"""守护进程
守护进程（Daemon）是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件；本次提到的守护进程是不阻挡主进程退出,会随着主进程退出而退出，如果要等待守护进程退出，需要加上join函数。"""
# encoding=utf-8
import multiprocessing
import time, logging
import sys


def daemon():
    p = multiprocessing.current_process()
    print('Starting:', p.name, p.pid)
    sys.stdout.flush()  # 将缓冲区数据写入终端
    print('Exiting :', p.name, p.pid)
    sys.stdout.flush()


def non_daemon():
    p = multiprocessing.current_process()
    print('Starting:', p.name, p.pid)
    sys.stdout.flush()
    print('Exiting :', p.name, p.pid)
    sys.stdout.flush()


if __name__ == '__main__':
    # 设置日志输出到控制台
    multiprocessing.log_to_stderr()
    logger = multiprocessing.get_logger()
    # 设置输出日志的级别
    logger.setLevel(logging.DEBUG)

    d = multiprocessing.Process(name='daemon', target=daemon)
    d.daemon = True  # 设置守护进程
    n = multiprocessing.Process(name='non-daemon', target=non_daemon)
    n.daemon = False  # 设置非守护进程
    d.start()
    time.sleep(1)
    n.start()
    ##  d.join(1)
    ##  n.join()
    print('d.is_alive()', d.is_alive())
    print("n.is_alive()", n.is_alive())
    print("main Process end!")
